import time
import random
from concurrent.futures import ThreadPoolExecutor, Future

"""
def task(video_url, num):
    print("开始执行任务", video_url)
    time.sleep(0.5)

# 创建线程池，最多维护10个线程
pool = ThreadPoolExecutor(10)

url_list = ["www.xxxx-{}.com".format(i) for i in range(100)]

for url in url_list:
    # 在线程池中提交一个任务，线程池中如果有空闲的线程，则分配一个线程去执行，
    # 执行完毕后将线程交给线程池；如果没有空闲的线程，则等待
    pool.submit(task, url, 2)

print("_____________________________________")
pool.shutdown(True)  # 等待线程池中的人物执行完毕后，再继续执行
print("end")
"""


def task(video_url):
    print("开始执行任务", video_url)
    time.sleep(0.5)
    return random.randint(0, 10)


def done(response):
    print("任务执行后的返回值", response.result())

future_list = []

# 创建线程池，最多维护10个线程
pool = ThreadPoolExecutor(10)
url_list = ["www.xxxx-{}.com".format(i) for i in range(100)]
for url in url_list:
    # 在线程池中提交一个任务，线程池中如果有空闲线程，则分配一个线程去执行，
    # 执行完毕后再将线程交给线程池；如果没有空闲的线程，则等待
    future = pool.submit(task, url)
    # future.add_done_callback(done)  # 是子主线程执行
    # 最终统一获取结果
    future_list.append(future)

pool.shutdown(True)
for fu in future_list:
    print(fu.result())

# 可以做分工，例如： task专门下载，done专门将下载的数据写入本地文件
